A computer is operated by a microprocessor which is a complex logic element that performs arithmetic, logic, and control operations. The microprocessor accesses and interacts with peripheral devices such as keyboards, monitors, printers, and file servers through a common external bus. Peripheral devices typically include a microcontroller or other logic element that is used to interface with the microprocessor of the host computer. The peripheral device's microcontroller handles data transfers between the host computer and the peripheral device as well as data processing tasks performed by the peripheral device.
A host computer typically has a set of predefined input/output (I/O) addresses assigned to commonly used peripheral devices, such as keyboards, monitors and printers, as well as a set of additional I/O addresses that can be assigned to other peripheral devices. The predefined I/0 addresses for commonly used peripheral devices are built into the host computer's hardware at the time of manufacture, and are also stored in the computer's operating system software.
Thus, peripheral devices which do not have an associated predefined I/O address must be assigned one of the additional I/O addresses. In addition, some peripheral devices, such as peripheral devices that can send data to the host computer, typically must be assigned an interrupt code, used to notify the host computer's microcontroller that the peripheral device needs to be "serviced".
It is a basic requirement in such computer systems that no two peripheral devices may be assigned the same I/O address, because that would cause the operation of the two peripheral devices to interfere with each other. Assigning two peripheral devices the same I/O address prevents effective communication between the host computer and either peripheral device, and often will cause the entire computer system to stop working.
Traditionally, so-called "add-on peripheral devices" include one or more jumpers or DIP switches that are used to set that device's I/O address and interrupt code. Additional jumpers or DIP switches are sometimes used to set other configuration parameters of a peripheral device, thereby determining the other operating characteristics of the peripheral device. Clearly, as the number of configuration parameters set by jumpers of DIP switches increases, the potential for error and improper configuration of the peripheral device increases.
Unfortunately, when jumpers or DIP switches are used to establish an I/O address for a peripheral device, the person installing the peripheral device must have knowledge of what I/O addresses and interrupt codes are available in the host computer and that person must physically manipulate one or more components on the peripheral device's circuit board, at the risk of damaging the peripheral device.
Furthermore, in order to know what I/O addresses and interrupt codes are available in the host computer, the person installing the peripheral device is required to have knowledge of the I/O addresses and interrupt codes assigned to all other peripheral devices connected to the host computer. That, in turn, may require that all those other peripheral devices be temporarily disconnected from the computer to allow inspection of their jumper settings, and may well require the installer to study the installation manuals of all those other peripheral devices to determine what I/O address and interrupt code are associated with those jumper settings. Clearly, this can be a tedious and error prone process, and one which is beyond the technical capabilities of many unsophisticated computer users.
To overcome the above noted problems, peripheral vendors have built devices which can be automatically configured by software. Typically, configuration software running on the host computer downloads configuration parameter values into registers in the peripheral device. The configuration parameters loaded into the peripheral device may include not only an I/O address, but also other parameters that determine the peripheral device's mode of operation.
A major shortcoming of the software configurable peripheral devices is that the peripheral device must be given an initial or default I/O address to be used prior to the downloading of configuration parameters into the peripheral device. The reason for this is that in order for the host computer to communicate with the peripheral device, it must be able to send and/or receive data at some established address. In prior art systems, the initial or default I/O address is established without knowledge of whether that address is available in a particular host computer. If the peripheral is configured at an I/O address which is already used by another peripheral, the host computer and the peripheral may not operate correctly.